home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 6 / QRZ Ham Radio Callsign Database - Volume 6.iso / mac / files / amiga / rhinosrc.lha / config.c < prev    next >
C/C++ Source or Header  |  1993-06-23  |  26KB  |  1,076 lines

  1. /* A collection of stuff heavily dependent on the configuration info
  2.  * in config.h. The idea is that configuration-dependent tables should
  3.  * be located here to avoid having to pepper lots of .c files with #ifdefs,
  4.  * requiring them to include config.h and be recompiled each time config.h
  5.  * is modified.
  6.  *
  7.  * Copyright 1991 Phil Karn, KA9Q
  8.  */
  9.  
  10. #include <stdio.h>
  11. #ifdef MSDOS
  12. #include <dos.h>
  13. #endif
  14. #include "global.h"
  15. #include "config.h"
  16. #include "mbuf.h"
  17. #include "timer.h"
  18. #include "proc.h"
  19. #include "iface.h"
  20. #include "ip.h"
  21. #include "tcp.h"
  22. #include "udp.h"
  23. #if defined(ARCNET) || defined(SANA)
  24. #include "arcnet.h"
  25. #endif
  26. #include "lapb.h"
  27. #include "ax25.h"
  28. #include "enet.h"
  29. #include "kiss.h"
  30. #include "nr4.h"
  31. #include "nrs.h"
  32. #include "netrom.h"
  33. #include "pktdrvr.h"
  34. #include "ppp.h"
  35. #include "slip.h"
  36. #include "arp.h"
  37. #include "icmp.h"
  38. #include "hardware.h"   /***/
  39. #include "usock.h"
  40. #include "cmdparse.h"
  41. #include "commands.h"
  42. #include "mailbox.h"
  43. #include "ax25mail.h"
  44. #include "nr4mail.h"
  45. #include "tipmail.h"
  46. #include "daemon.h"
  47. #include "bootp.h"
  48. #include "asy.h"
  49. #include "trace.h"
  50. #ifdef    QTSO
  51. #include "qtso.h"
  52. #endif
  53. #ifdef SANA
  54. #include "amiga/sana2.h"
  55. #endif
  56.  
  57. int dotest __ARGS((int argc,char *argv[],void *p));     /**/
  58. static int dostart __ARGS((int argc,char *argv[],void *p));
  59. static int dostop __ARGS((int argc,char *argv[],void *p));
  60.  
  61. #ifdef    AX25
  62. static void axip __ARGS((struct iface *iface,struct ax25_cb *axp,char *src,
  63.     char *dest,struct mbuf *bp,int mcast));
  64. static void axarp __ARGS((struct iface *iface,struct ax25_cb *axp,char *src,
  65.     char *dest,struct mbuf *bp,int mcast));
  66. static void axnr __ARGS((struct iface *iface,struct ax25_cb *axp,char *src,
  67.     char *dest,struct mbuf *bp,int mcast));
  68. #endif    /* AX25 */
  69.  
  70. struct mbuf *Hopper;        /* Queue of incoming packets */
  71. unsigned Nsessions = NSESSIONS;
  72. unsigned Nsock = DEFNSOCK;        /* Number of socket entries */
  73.  
  74. /* Free memory threshold, below which things start to happen to conserve
  75.  * memory, like garbage collection, source quenching and refusing connects
  76.  */
  77. int32 Memthresh = MTHRESH;
  78.  
  79. int Nibufs = NIBUFS;        /* Number of interrupt buffers */
  80. unsigned Ibufsize = IBUFSIZE;    /* Size of each interrupt buffer */
  81. unsigned Nfiles = DEFNFILES;
  82.  
  83. /* Command lookup and branch tables */
  84. struct cmds Cmds[] = {
  85.     /* The "go" command must be first */
  86.     "",             go,             0, 0, NULLCHAR,
  87. #ifndef AMIGA
  88.     "!",            doshell,        0, 0, NULLCHAR,
  89. #endif
  90.     "abort",        doabort,        0, 0, NULLCHAR,
  91. #ifdef    AMIGA
  92.     "amiga",        doamiga,        0, 0, NULLCHAR,
  93. #endif
  94. #if    (defined(MAC) && defined(APPLETALK))
  95.     "applestat",    doatstat,       0,      0, NULLCHAR,
  96. #endif
  97. #if    (defined(AX25) || defined(ETHER) || defined(APPLETALK) || defined(SANA))
  98.     "arp",          doarp,          0, 0, NULLCHAR,
  99. #endif
  100. #ifdef    ASY
  101.     "asystat",      doasystat,      0, 0, NULLCHAR,
  102. #endif
  103.     "attach",       doattach,       0, 2,
  104.         "attach <hardware> <hw specific options>",
  105. #ifdef    AX25
  106.     "ax25",         doax25,         0, 0, NULLCHAR,
  107. #endif
  108. #ifdef    BOOTP
  109.     "bootp",        dobootp,        0, 0, NULLCHAR,
  110.     "bootpd",       bootpdcmd,      0, 0, NULLCHAR,
  111. #endif
  112. /* This one is out of alpabetical order to allow abbreviation to "c" */
  113. #ifdef    AX25
  114.     "connect",      doconnect,      1024, 3,
  115.     "connect <interface> <callsign>",
  116. #endif
  117. #if    !defined(UNIX) && !defined(XAMIGA)
  118.     "cd",           docd,           0, 0, NULLCHAR,
  119. #endif
  120.     "close",        doclose,        0, 0, NULLCHAR,
  121. /* This one is out of alpabetical order to allow abbreviation to "d" */
  122.     "disconnect",   doclose,        0, 0, NULLCHAR,
  123.     "delete",       dodelete,       0, 2, "delete <file>",
  124.     "detach",       dodetach,       0, 2, "detach <interface>",
  125. #ifdef    DIALER
  126.     "dialer",       dodialer,       0, 2,
  127.     "dialer <iface> <timeout> [<raise script> <lower script>]",
  128. #endif
  129. #ifndef XAMIGA
  130.     "dir",          dodir,          512, 0, NULLCHAR, /* note sequence */
  131. #endif
  132.     "domain",       dodomain,       0, 0, NULLCHAR,
  133. #ifdef    DRSI
  134.     "drsistat",     dodrstat,       0, 0, NULLCHAR,
  135. #endif
  136. #ifdef    EAGLE
  137.     "eaglestat",    doegstat,       0, 0, NULLCHAR,
  138. #endif
  139.     "echo",         doecho,         0, 0, NULLCHAR,
  140.     "eol",          doeol,          0, 0, NULLCHAR,
  141. #if    !defined(MSDOS)
  142.     "escape",       doescape,       0, 0, NULLCHAR,
  143. #endif
  144.     "exit",         doexit,         0, 0, NULLCHAR,
  145.     "files",        dofiles,        0, 0, NULLCHAR,
  146.     "finger",       dofinger,       1024, 2, "finger name@host",
  147.     "ftp",          doftp,          2048, 2, "ftp <address>",
  148. #ifdef HAPN
  149.     "hapnstat",     dohapnstat,     0, 0, NULLCHAR,
  150. #endif
  151.     "help",         dohelp,         0, 0, NULLCHAR,
  152. #ifdef    HOPCHECK
  153.     "hop",          dohop,          0, 0, NULLCHAR,
  154. #endif
  155.     "hostname",     dohostname,     0, 0, NULLCHAR,
  156. #ifdef    HS
  157.     "hs",           dohs,           0, 0, NULLCHAR,
  158. #endif
  159.     "icmp",         doicmp,         0, 0, NULLCHAR,
  160.     "ifconfig",     doifconfig,     0, 0, NULLCHAR,
  161.     "ip",           doip,           0, 0, NULLCHAR,
  162. #ifdef    MSDOS
  163.     "isat",         doisat,         0, 0, NULLCHAR,
  164. #endif
  165.     "kick",         dokick,         0, 0, NULLCHAR,
  166.     "log",          dolog,          0, 0, NULLCHAR,
  167. #ifdef    MAILBOX
  168.     "mbox",         dombox,         0, 0, NULLCHAR,
  169. #endif
  170. #ifndef UNIX
  171.     "memory",       domem,          0, 0, NULLCHAR,
  172. #endif
  173.     "mkdir",        domkd,          0, 2, "mkdir <directory>",
  174. #ifdef    AX25
  175.     "mode",         domode,         0, 2, "mode <interface>",
  176. #endif
  177.     "more",         doview,         0, 2, "more <filename>",
  178. #ifdef    NETROM
  179.     "netrom",       donetrom,       0, 0, NULLCHAR,
  180. #endif    /* NETROM */
  181. #ifdef    NNTP
  182.     "nntp",         donntp,         0, 0, NULLCHAR,
  183. #endif    /* NNTP */
  184. #ifdef    NRS
  185.     "nrstat",       donrstat,       0, 0, NULLCHAR,
  186. #endif    /* NRS */
  187.     "param",        doparam,        0, 2, "param <interface>",
  188.     "ping",         doping,         512, 2,
  189.     "ping <hostid> [<length> [<interval> [incflag]]]",
  190. #ifdef    PI
  191.     "pistatus",     dopistat,       0, 0, NULLCHAR,
  192. #endif
  193. #ifdef POP
  194.     "pop",          dopop,          0, 0, NULLCHAR,
  195. #endif
  196. #ifdef PPP
  197.     "ppp",          doppp_commands, 0, 0, NULLCHAR,
  198. #endif
  199.     "ps",           ps,             0, 0, NULLCHAR,
  200. #if    !defined(UNIX) && !defined(XAMIGA)
  201.     "pwd",          docd,           0, 0, NULLCHAR,
  202. #endif
  203.     "record",       dorecord,       0, 0, NULLCHAR,
  204.     "remote",       doremote,       0, 3, "remote [-p port] [-k key] [-a kickaddr] <address> exit|reset|kick",
  205.     "rename",       dorename,       0, 3, "rename <oldfile> <newfile>",
  206.     "reset",        doreset,        0, 0, NULLCHAR,
  207. #ifdef    RIP
  208.     "rip",          dorip,          0, 0, NULLCHAR,
  209. #endif
  210.     "rmdir",        dormd,          0, 2, "rmdir <directory>",
  211.     "route",        doroute,        0, 0, NULLCHAR,
  212.     "session",      dosession,      0, 0, NULLCHAR,
  213. #ifdef    SCC
  214.     "sccstat",      dosccstat,      0, 0, NULLCHAR,
  215. #endif
  216. #if    !defined(AMIGA)
  217.     "shell",        doshell,        0, 0, NULLCHAR,
  218. #endif
  219.     "smtp",         dosmtp,         0, 0, NULLCHAR,
  220.     "socket",       dosock,         0, 0, NULLCHAR,
  221.     "source",    dosource,    0, 2, "source <filename>",
  222. #ifdef    SERVERS
  223.     "start",        dostart,        0, 2, "start <servername>",
  224.     "stop",         dostop,         0, 2, "stop <servername>",
  225. #endif
  226.     "tcp",          dotcp,          0, 0, NULLCHAR,
  227.     "telnet",       dotelnet,       1024, 2, "telnet <address>",
  228. /*    "test",         dotest,         1024, 0, NULLCHAR, */
  229.     "tip",          dotip,          256, 2, "tip <iface>",
  230. #ifdef    TRACE
  231.     "trace",        dotrace,        512, 0, NULLCHAR,
  232. #endif
  233.     "udp",          doudp,          0, 0, NULLCHAR,
  234.     "upload",       doupload,       0, 0, NULLCHAR,
  235.     "view",         doview,         0, 2, "view <filename>",
  236. #ifdef    MSDOS
  237.     "watch",        doswatch,       0, 0, NULLCHAR,
  238. #endif
  239.     "?",            dohelp,         0, 0, NULLCHAR,
  240.     NULLCHAR,    NULLFP,     0, 0,
  241.         "Unknown command; type \"?\" for list",
  242. };
  243.  
  244. /* List of supported hardware devices */
  245. struct cmds Attab[] = {
  246. #ifdef    ASY
  247.     /* Ordinary PC asynchronous adaptor */
  248.     "asy", asy_attach, 0, 8,
  249. #ifndef AMIGA
  250.     "attach asy <address> <vector> slip|ax25|nrs|ppp <label> <buffers> <mtu> <speed> [ip_addr]",
  251. #else
  252.     "attach asy <driver> <unit> slip|ax25|nrs|ppp <label> <buffers> <mtu> <speed> [ip_addr]",
  253. #endif    /* AMIGA */
  254. #endif    /* ASY */
  255. #ifdef    PC100
  256.     /* PACCOMM PC-100 8530 HDLC adaptor */
  257.     "pc100", pc_attach, 0, 8,
  258.     "attach pc100 <address> <vector> ax25 <label> <buffers>\
  259.  <mtu> <speed> [ip_addra] [ip_addrb]",
  260. #endif
  261. #ifdef    DRSI
  262.     /* DRSI PCPA card in low speed mode */
  263.     "drsi", dr_attach, 0, 8,
  264.     "attach drsi <address> <vector> ax25 <label> <bufsize> <mtu>\
  265. <chan a speed> <chan b speed> [ip addr a] [ip addr b]",
  266. #endif
  267. #ifdef    EAGLE
  268.     /* EAGLE RS-232C 8530 HDLC adaptor */
  269.     "eagle", eg_attach, 0, 8,
  270.     "attach eagle <address> <vector> ax25 <label> <buffers>\
  271.  <mtu> <speed> [ip_addra] [ip_addrb]",
  272. #endif
  273. #ifdef    PI
  274.     /* PI 8530 HDLC adaptor */
  275.     "pi", pi_attach, 0, 8,
  276.     "attach pi <address> <vector> <dmachannel> ax25 <label> <buffers>\
  277.  <mtu> <speed> [ip_addra] [ip_addrb]",
  278. #endif
  279. #ifdef    HAPN
  280.     /* Hamilton Area Packet Radio (HAPN) 8273 HDLC adaptor */
  281.     "hapn", hapn_attach, 0, 8,
  282.     "attach hapn <address> <vector> ax25 <label> <rx bufsize>\
  283.  <mtu> csma|full [ip_addr]",
  284. #endif
  285. #ifdef    APPLETALK
  286.     /* Macintosh AppleTalk */
  287.     "0", at_attach, 0, 7,
  288.     "attach 0 <protocol type> <device> arpa <label> <rx bufsize> <mtu> [ip_addr]",
  289. #endif
  290. #ifdef NETROM
  291.     /* fake netrom interface */
  292.     "netrom", nr_attach, 0, 1,
  293.     "attach netrom [ip_addr]",
  294. #endif
  295. #ifdef    PACKET
  296.     /* FTP Software's packet driver spec */
  297.     "packet", pk_attach, 0, 4,
  298.     "attach packet <int#> <label> <buffers> <mtu> [ip_addr]",
  299. #endif
  300. #ifdef    HS
  301.     /* Special high speed driver for DRSI PCPA or Eagle cards */
  302.     "hs", hs_attach, 0, 7,
  303.     "attach hs <address> <vector> ax25 <label> <buffers> <mtu>\
  304.  <txdelay> <persistence> [ip_addra] [ip_addrb]",
  305. #endif
  306. #ifdef SANA
  307.     /* Standard Amiga Network Architecture */
  308.     "sana", sana_attach, 0, 5,
  309.     "attach sana <device> <unit> <label> <buffers> <mtu>",
  310. #endif
  311. #ifdef SCC
  312.     "scc", scc_attach, 0, 7,
  313.     "attach scc <devices> init <addr> <spacing> <Aoff> <Boff> <Dataoff>\n"
  314.     "   <intack> <vec> [p]<clock> [hdwe] [param]\n"
  315.     "attach scc <chan> slip|kiss|nrs|ax25 <label> <mtu> <speed> <bufsize> [call] ",
  316. #endif
  317.     NULLCHAR,
  318. };
  319.  
  320. #ifdef    SERVERS
  321. /* "start" and "stop" subcommands */
  322. static struct cmds Startcmds[] = {
  323. #if    defined(AX25) && defined(MAILBOX)
  324.     "ax25",         ax25start,      256, 0, NULLCHAR,
  325. #endif
  326.     "discard",      dis1,           256, 0, NULLCHAR,
  327.     "echo",         echo1,          256, 0, NULLCHAR,
  328.     "finger",       finstart,       256, 0, NULLCHAR,
  329.     "ftp",          ftpstart,       256, 0, NULLCHAR,
  330. #if    defined(NETROM) && defined(MAILBOX)
  331.     "netrom",       nr4start,       256, 0, NULLCHAR,
  332. #endif
  333. #ifdef POP
  334.     "pop",          pop1,           256, 0, NULLCHAR,
  335. #endif
  336. #ifdef    RIP
  337.     "rip",          doripinit,      0,   0, NULLCHAR,
  338. #endif
  339.     "smtp",         smtp1,          256, 0, NULLCHAR,
  340. #if    defined(MAILBOX)
  341.     "telnet",       telnet1,        256, 0, NULLCHAR,
  342.     "tip",          tipstart,       256, 2, "start tip <interface>",
  343. #endif
  344.     "ttylink",      ttylstart,      256, 0, NULLCHAR,
  345.     "remote",       rem1,           768, 0, NULLCHAR,
  346.     NULLCHAR,
  347. };
  348.  
  349. static struct cmds Stopcmds[] = {
  350. #if    defined(AX25) && defined(MAILBOX)
  351.     "ax25",         ax250,          0, 0, NULLCHAR,
  352. #endif
  353.     "discard",      dis0,           0, 0, NULLCHAR,
  354.     "echo",         echo0,          0, 0, NULLCHAR,
  355.     "finger",       fin0,           0, 0, NULLCHAR,
  356.     "ftp",          ftp0,           0, 0, NULLCHAR,
  357. #if    defined(NETROM) && defined(MAILBOX)
  358.     "netrom",       nr40,           0, 0, NULLCHAR,
  359. #endif
  360. #ifdef    POP
  361.     "pop",          pop0,           0, 0, NULLCHAR,
  362. #endif
  363. #ifdef    RIP
  364.     "rip",          doripstop,      0, 0, NULLCHAR,
  365. #endif
  366.     "smtp",         smtp0,          0, 0, NULLCHAR,
  367. #ifdef    MAILBOX
  368.     "telnet",       telnet0,        0, 0, NULLCHAR,
  369.     "tip",          tip0,           0, 2, "stop tip <interface>",
  370. #endif
  371.     "ttylink",      ttyl0,          0, 0, NULLCHAR,
  372.     "remote",       rem0,           0, 0, NULLCHAR,
  373.     NULLCHAR,
  374. };
  375. #endif    /* SERVERS */
  376.  
  377. /* Socket-protocol interface table */
  378. struct socklink Socklink[] = {
  379.     /* type,
  380.      * socket,    bind,        listen,     connect,
  381.      * accept,    recv,        send,        qlen,
  382.      * kick,    shut,        close,        check,
  383.      * error,    state,        status,     eol_seq
  384.      */
  385.     TYPE_TCP,
  386.     so_tcp,     NULLFP,     so_tcp_listen,    so_tcp_conn,
  387.     TRUE,        so_tcp_recv,    so_tcp_send,    so_tcp_qlen,
  388.     so_tcp_kick,    so_tcp_shut,    so_tcp_close,    checkipaddr,
  389.     Tcpreasons,    tcpstate,    so_tcp_stat,    Inet_eol,
  390.  
  391.     TYPE_UDP,
  392.     so_udp,     so_udp_bind,    NULLFP,     so_udp_conn,
  393.     FALSE,        so_udp_recv,    so_udp_send,    so_udp_qlen,
  394.     NULLFP,     NULLFP,     so_udp_close,    checkipaddr,
  395.     NULL,        NULLFP,     so_udp_stat,    Inet_eol,
  396.  
  397. #ifdef    AX25
  398.     TYPE_AX25I,
  399.     so_ax_sock,    NULLFP,     so_ax_listen,    so_ax_conn,
  400.     TRUE,        so_ax_recv,    so_ax_send,    so_ax_qlen,
  401.     so_ax_kick,    so_ax_shut,    so_ax_close,    checkaxaddr,
  402.     Axreasons,    axstate,    so_ax_stat,    Ax25_eol,
  403.  
  404.     TYPE_AX25UI,
  405.     so_axui_sock,    so_axui_bind,    NULLFP,     so_axui_conn,
  406.     FALSE,        so_axui_recv,    so_axui_send,    so_axui_qlen,
  407.     NULLFP,     NULLFP,     so_axui_close,    checkaxaddr,
  408.     NULL,        NULLFP,     NULLFP,     Ax25_eol,
  409. #endif    /* AX25 */
  410.  
  411.     TYPE_RAW,
  412.     so_ip_sock,    NULLFP,     NULLFP,     so_ip_conn,
  413.     FALSE,        so_ip_recv,    so_ip_send,    so_ip_qlen,
  414.     NULLFP,     NULLFP,     so_ip_close,    checkipaddr,
  415.     NULL,        NULLFP,     NULLFP,     Inet_eol,
  416.  
  417. #ifdef    NETROM
  418.     TYPE_NETROML3,
  419.     so_n3_sock,    NULLFP,     NULLFP,     so_n3_conn,
  420.     FALSE,        so_n3_recv,    so_n3_send,    so_n3_qlen,
  421.     NULLFP,     NULLFP,     so_n3_close,    checknraddr,
  422.     NULL,        NULLFP,     NULLFP,     Ax25_eol,
  423.  
  424.     TYPE_NETROML4,
  425.     so_n4_sock,    NULLFP,     so_n4_listen,    so_n4_conn,
  426.     TRUE,        so_n4_recv,    so_n4_send,    so_n4_qlen,
  427.     so_n4_kick,    so_n4_shut,    so_n4_close,    checknraddr,
  428.     Nr4reasons,    nrstate,    so_n4_stat,    Ax25_eol,
  429. #endif    /* NETROM */
  430.  
  431. #ifdef    LOCSOCK
  432.     TYPE_LOCAL_STREAM,
  433.     so_los,     NULLFP,     NULLFP,     NULLFP,
  434.     TRUE,        so_lo_recv,    so_los_send,    so_los_qlen,
  435.     NULLFP,     so_loc_shut,    so_loc_close,    NULLFP,
  436.     NULL,        NULLFP,     so_loc_stat,    Eol,
  437.  
  438.     TYPE_LOCAL_DGRAM,
  439.     so_lod,     NULLFP,     NULLFP,     NULLFP,
  440.     FALSE,        so_lo_recv,    so_lod_send,    so_lod_qlen,
  441.     NULLFP,     so_loc_shut,    so_loc_close,    NULLFP,
  442.     NULL,        NULLFP,     so_loc_stat,    Eol,
  443. #endif
  444.  
  445.     -1
  446. };
  447.  
  448. /* Table of functions for printing socket addresses */
  449. char * (*Psock[]) __ARGS((struct sockaddr *)) = {
  450.     ippsocket,
  451. #ifdef    AX25
  452.     axpsocket,
  453. #else
  454.     NULLFP,
  455. #endif
  456. #ifdef    NETROM
  457.     nrpsocket,
  458. #else
  459.     NULLFP,
  460. #endif
  461.     lopsocket,
  462. };
  463.  
  464. /* TCP port numbers to be considered "interactive" by the IP routing
  465.  * code and given priority in queueing
  466.  */
  467. int Tcp_interact[] = {
  468.     IPPORT_FTP,    /* FTP control (not data!) */
  469.     IPPORT_TELNET,    /* Telnet */
  470.     IPPORT_LOGIN,    /* BSD rlogin */
  471.     IPPORT_MTP,    /* Secondary telnet */
  472.     -1
  473. };
  474.  
  475. /* Transport protocols atop IP */
  476. struct iplink Iplink[] = {
  477.     TCP_PTCL,    tcp_input,
  478.     UDP_PTCL,    udp_input,
  479.     ICMP_PTCL,    icmp_input,
  480.     IP_PTCL,    ipip_recv,
  481.     0,        0
  482. };
  483.  
  484. /* Transport protocols atop ICMP */
  485. struct icmplink Icmplink[] = {
  486.     TCP_PTCL,    tcp_icmp,
  487.     0,        0
  488. };
  489.  
  490. #ifdef    AX25
  491. /* Linkage to network protocols atop ax25 */
  492. struct axlink Axlink[] = {
  493.     PID_IP,     axip,
  494.     PID_ARP,    axarp,
  495. #ifdef    NETROM
  496.     PID_NETROM,    axnr,
  497. #endif
  498.     PID_NO_L3,    axnl3,
  499.     0,        NULL,
  500. };
  501. #endif    /* AX25 */
  502.  
  503. /* ARP protocol linkages, indexed by arp's hardware type */
  504. struct arp_type Arp_type[NHWTYPES] = {
  505. #ifdef    NETROM
  506.     AXALEN, 0, 0, 0, NULLCHAR, pax25, setcall,    /* ARP_NETROM */
  507. #else
  508.     0, 0, 0, 0, NULLCHAR,NULL,NULL,
  509. #endif
  510.  
  511. #ifdef    ETHER
  512.     EADDR_LEN,IP_TYPE,ARP_TYPE,1,Ether_bdcst,pether,gether, /* ARP_ETHER */
  513. #else
  514. #ifdef SANA
  515.     EADDR_LEN,IP_TYPE,ARP_TYPE,1,0,0,0, /* ARP_ETHER */
  516. #else
  517.     0, 0, 0, 0, NULLCHAR,NULL,NULL,
  518. #endif
  519. #endif
  520.  
  521.     0, 0, 0, 0, NULLCHAR,NULL,NULL,         /* ARP_EETHER */
  522.  
  523. #ifdef    AX25
  524.     AXALEN, PID_IP, PID_ARP, 10, Ax25multi[0], pax25, setcall,
  525. #else
  526. #ifdef SANA
  527.     AXALEN, PID_IP, PID_ARP, 10, 0, 0, 0,
  528. #else
  529.     0, 0, 0, 0, NULLCHAR,NULL,NULL,         /* ARP_AX25 */
  530. #endif
  531. #endif
  532.  
  533.     0, 0, 0, 0, NULLCHAR,NULL,NULL,         /* ARP_PRONET */
  534.  
  535.     0, 0, 0, 0, NULLCHAR,NULL,NULL,         /* ARP_CHAOS */
  536.  
  537.     0, 0, 0, 0, NULLCHAR,NULL,NULL,         /* ARP_IEEE802 */
  538.  
  539. #ifdef    ARCNET
  540.     AADDR_LEN, ARC_IP, ARC_ARP, 1, ARC_bdcst, parc, garc, /* ARP_ARCNET */
  541. #else
  542. #ifdef SANA
  543.     AADDR_LEN, ARC_IP, ARC_ARP, 1, 0, 0, 0, /* ARP_ARCNET */
  544. #else
  545.     0, 0, 0, 0, NULLCHAR,NULL,NULL,
  546. #endif
  547. #endif
  548.  
  549.     0, 0, 0, 0, NULLCHAR,NULL,NULL,         /* ARP_APPLETALK */
  550. };
  551. /* Get rid of trace references in Iftypes[] if TRACE is turned off */
  552. #ifndef TRACE
  553. #define ip_dump     NULLVFP
  554. #define ax25_dump    NULLVFP
  555. #define ki_dump     NULLVFP
  556. #define sl_dump     NULLVFP
  557. #define ether_dump    NULLVFP
  558. #define ppp_dump    NULLVFP
  559. #define arc_dump    NULLVFP
  560. #endif    /* TRACE */
  561.  
  562. /* Table of interface types. Contains most device- and encapsulation-
  563.  * dependent info
  564.  */
  565. struct iftype Iftypes[] = {
  566.     /* This entry must be first, since Loopback refers to it */
  567.     "None",         NULL,           NULL,           NULL,
  568.     NULL,        CL_NONE,    0,        ip_proc,
  569.     NULLFP,     ip_dump,
  570.  
  571. #ifdef    AX25
  572.     "AX25",         ax_send,        ax_output,      pax25,
  573.     setcall,    CL_AX25,    AXALEN,     ax_recv,
  574.     ax_forus,    ax25_dump,
  575. #endif    /* AX25 */
  576.  
  577. #ifdef    KISS
  578.     "KISS",         ax_send,        ax_output,      pax25,
  579.     setcall,    CL_AX25,    AXALEN,     kiss_recv,
  580.     ki_forus,    ki_dump,
  581. #endif    /* KISS */
  582.  
  583. #ifdef    SANA
  584.     "SANA",         sana_send_bcasthw, sana_output, psana,
  585.     gsana,        CL_NONE,    SANA2_MAX_ADDR_BYTES,    sanaproc,
  586.     sana_forus,    sana_dump,
  587. #endif    /* SANA */
  588.  
  589. #ifdef    SLIP
  590.     "SLIP",         slip_send,      NULL,           NULL,
  591.     NULL,        CL_NONE,    0,        ip_proc,
  592.     NULLFP,     ip_dump,
  593. #endif    /* SLIP */
  594.  
  595. #ifdef    VJCOMPRESS
  596.     "VJSLIP",       slip_send,      NULL,           NULL,
  597.     NULL,        CL_NONE,    0,        ip_proc,
  598.     NULLFP,     sl_dump,
  599. #endif    /* VJCOMPRESS */
  600.  
  601. #ifdef    ETHER
  602.     /* Note: NULL is specified for the scan function even though
  603.      * gether() exists because the packet drivers don't support
  604.      * address setting.
  605.      */
  606.     "Ethernet",     enet_send,      enet_output,    pether,
  607.     NULL,        CL_ETHERNET,    EADDR_LEN,    eproc,
  608.     ether_forus,    ether_dump,
  609. #endif    /* ETHER */
  610.  
  611. #ifdef    NETROM
  612.     "NETROM",       nr_send,        NULL,           pax25,
  613.     setcall,    CL_NETROM,    AXALEN,     NULLVFP,
  614.     NULLFP,     NULLVFP,
  615. #endif    /* NETROM */
  616.  
  617. #ifdef    SLFP
  618.     "SLFP",         pk_send,        NULL,           NULL,
  619.     NULL,        CL_NONE,    0,        ip_proc,
  620.     NULLFP,     ip_dump,
  621. #endif    /* SLFP */
  622.  
  623. #ifdef    PPP
  624.     "PPP",          ppp_send,       ppp_output,     NULL,
  625.     NULL,        CL_PPP,     0,        ppp_proc,
  626.     NULLFP,     ppp_dump,
  627. #endif    /* PPP */
  628.  
  629. #ifdef    ARCNET
  630.     "Arcnet",       anet_send,      anet_output,    parc,
  631.     garc,        CL_ARCNET,    1,        aproc,
  632.     arc_forus,    arc_dump,
  633. #endif    /* ARCNET */
  634.  
  635. #ifdef    QTSO
  636.     "QTSO",         qtso_send,      qtso_output,    NULL,
  637.     NULL,        CL_NONE,    0,        qtso_proc,
  638.     NULLFP,     NULLVFP,
  639. #endif    /* QTSO */
  640.  
  641.     NULLCHAR,    NULLFP,     NULLFP,     NULL,
  642.     NULL,        -1,        0,        NULLFP,
  643.     NULLFP,     NULLVFP,
  644. };
  645.  
  646. /* Asynchronous interface mode table */
  647. #ifdef    ASY
  648. struct asymode Asymode[] = {
  649. #ifdef    SLIP
  650.     "SLIP", FR_END,         slip_init,      slip_free,
  651. #endif
  652. #ifdef    KISS
  653.     "AX25", FR_END,         kiss_init,      kiss_free,
  654.     "KISS", FR_END,         kiss_init,      kiss_free,
  655. #endif
  656. #ifdef    NRS
  657.     "NRS",  ETX,            nrs_init,       nrs_free,
  658. #endif
  659. #ifdef    PPP
  660.     "PPP",  HDLC_FLAG,      ppp_init,       ppp_free,
  661. #endif
  662. #ifdef    QTSO
  663.     "QTSO", HDLC_FLAG,      qtso_init,      qtso_free,
  664. #endif
  665.     NULLCHAR
  666. };
  667. #endif    /* ASY */
  668.  
  669.  
  670. /* daemons to be run at startup time */
  671. struct daemon Daemons[] = {
  672.     "killer",       512,    killer,
  673.     "gcollect",     256,    gcollect,
  674.     "timer",        1024,   timerproc,
  675.     "network",      1536,   network,
  676.     "keyboard",     250,    keyboard,
  677.     NULLCHAR,    0,    NULLVFP
  678. };
  679.  
  680. /* Functions to be called on each clock tick */
  681. void (*Cfunc[])__ARGS((void)) = {
  682. #ifdef MSDOS
  683.     pctick, /* Call PC-specific stuff to keep time */
  684.     kbint,    /* Necessary because there's no hardware keyboard interrupt */
  685. #endif
  686. #if !defined(AMIGA)
  687.     refiq,    /* Replenish interrupt pool */
  688. #endif
  689.     sesflush,    /* Flush current session output */
  690. #if defined(ASY) && defined(MSDOS)
  691.     asytimer,
  692. #endif
  693. #ifdef    SCC
  694.     scctimer,
  695. #endif
  696.     NULL,
  697. };
  698.  
  699. /* Entry points for garbage collection */
  700. void (*Gcollect[])__ARGS((int)) = {
  701.     tcp_garbage,
  702.     ip_garbage,
  703.     udp_garbage,
  704.     st_garbage,
  705. #ifdef    AX25
  706.     lapb_garbage,
  707. #endif
  708. #ifdef    NETROM
  709.     nr_garbage,
  710. #endif
  711.     NULL
  712. };
  713.  
  714. /* Functions to be called at shutdown */
  715. void (*Shutdown[])__ARGS((void)) = {
  716. #ifdef    SCC
  717.     sccstop,
  718. #endif
  719. #ifdef MSDOS
  720.     uchtimer,    /* Unlink timer handler from timer chain */
  721. #endif
  722.     NULLVFP,
  723. };
  724.  
  725. #ifdef    MAILBOX
  726. void (*Listusers) __ARGS((FILE *network)) = listusers;
  727. #else
  728. void (*Listusers) __ARGS((FILE *network)) = NULL;
  729. #endif    /* MAILBOX */
  730.  
  731. #ifndef BOOTP
  732. int WantBootp = 0;
  733.  
  734. int
  735. bootp_validPacket(ip,bpp)
  736. struct ip *ip;
  737. struct mbuf **bpp;
  738. {
  739.     return 0;
  740. }
  741. #endif    /* BOOTP */
  742.  
  743. /* Packet tracing stuff */
  744. #ifdef    TRACE
  745. #include "trace.h"
  746.  
  747. #else    /* TRACE */
  748.  
  749. /* Stub for packet dump function */
  750. void
  751. dump(iface,direction,type,bp)
  752. struct iface *iface;
  753. int direction;
  754. unsigned type;
  755. struct mbuf *bp;
  756. {
  757. }
  758. void
  759. raw_dump(iface,direction,bp)
  760. struct iface *iface;
  761. int direction;
  762. struct mbuf *bp;
  763. {
  764. }
  765. #endif    /* TRACE */
  766.  
  767. #ifndef TRACEBACK
  768. void
  769. stktrace()
  770. {
  771. }
  772. #endif
  773.  
  774. #ifndef LZW
  775. void
  776. lzwfree(up)
  777. struct usock *up;
  778. {
  779. }
  780. #endif
  781.  
  782. #ifdef    AX25
  783. /* Hooks for passing incoming AX.25 data frames to network protocols */
  784. static void
  785. axip(iface,axp,src,dest,bp,mcast)
  786. struct iface *iface;
  787. struct ax25_cb *axp;
  788. char *src;
  789. char *dest;
  790. struct mbuf *bp;
  791. int mcast;
  792. {
  793.     (void)ip_route(iface,bp,mcast);
  794. }
  795.  
  796. static void
  797. axarp(iface,axp,src,dest,bp,mcast)
  798. struct iface *iface;
  799. struct ax25_cb *axp;
  800. char *src;
  801. char *dest;
  802. struct mbuf *bp;
  803. int mcast;
  804. {
  805.     (void)arp_input(iface,bp);
  806. }
  807.  
  808. #ifdef    NETROM
  809. static void
  810. axnr(iface,axp,src,dest,bp,mcast)
  811. struct iface *iface;
  812. struct ax25_cb *axp;
  813. char *src;
  814. char *dest;
  815. struct mbuf *bp;
  816. int mcast;
  817. {
  818.     if(!mcast)
  819.         nr_route(bp,axp);
  820.     else
  821.         nr_nodercv(iface,src,bp);
  822. }
  823.  
  824. #endif    /* NETROM */
  825. #endif    /* AX25 */
  826.  
  827. #ifndef RIP
  828. /* Stub for routing timeout when RIP is not configured -- just remove entry */
  829. void
  830. rt_timeout(s)
  831. void *s;
  832. {
  833.     struct route *stale = (struct route *)s;
  834.  
  835.     rt_drop(stale->target,stale->bits);
  836. }
  837. #endif
  838.  
  839. /* Stubs for demand dialer */
  840. #ifndef DIALER
  841. void
  842. dialer_kick(asyp)
  843. struct asy *asyp;
  844. {
  845. }
  846. #endif
  847.  
  848. /* Stubs for Van Jacobsen header compression */
  849. #if !defined(VJCOMPRESS) && defined(ASY)
  850. struct slcompress *
  851. slhc_init(rslots,tslots)
  852. int rslots;
  853. int tslots;
  854. {
  855.     return NULLSLCOMPR;
  856. }
  857. int
  858. slhc_compress(comp, bpp, compress_cid)
  859. struct slcompress *comp;
  860. struct mbuf **bpp;
  861. int compress_cid;
  862. {
  863.     return SL_TYPE_IP;
  864. }
  865. int
  866. slhc_uncompress(comp, bpp)
  867. struct slcompress *comp;
  868. struct mbuf **bpp;
  869. {
  870.     return -1;    /* Can't decompress */
  871. }
  872. void
  873. shlc_i_status(comp)
  874. struct slcompress *comp;
  875. {
  876. }
  877. void
  878. shlc_o_status(comp)
  879. struct slcompress *comp;
  880. {
  881. }
  882. int
  883. slhc_remember(comp, bpp)
  884. struct slcompress *comp;
  885. struct mbuf **bpp;
  886. {
  887.     return -1;
  888. }
  889. #endif /* !defined(VJCOMPRESS) && defined(ASY) */
  890.  
  891. #ifdef    SERVERS
  892. static int
  893. dostart(argc,argv,p)
  894. int argc;
  895. char *argv[];
  896. void *p;
  897. {
  898.     return subcmd(Startcmds,argc,argv,p);
  899. }
  900. static int
  901. dostop(argc,argv,p)
  902. int argc;
  903. char *argv[];
  904. void *p;
  905. {
  906.     return subcmd(Stopcmds,argc,argv,p);
  907. }
  908. #endif    /* SERVERS */
  909.  
  910. #ifdef    notdef
  911. int
  912. dotest(argc,argv,p)
  913. int argc;
  914. char *argv[];
  915. void *p;
  916. {
  917.     long i;
  918.     int32 oldtime = 0;
  919.     int32 newtime;
  920.  
  921.     Current->flowmode = 1;
  922.     for(i=0;i<40000;i++){
  923.         newtime = msclock();
  924.         if(newtime < oldtime){
  925.             printf("Clock slip %ld: %ld - %ld = %ld\n",i,
  926.                 newtime,oldtime,newtime-oldtime);
  927.         } else
  928.             oldtime = newtime;
  929.     }
  930.     pwait(NULL);
  931.     Current->flowmode = 0;
  932.     return 0;
  933. }
  934.  
  935. #endif
  936. #ifdef    notdef
  937. int
  938. dotest(argc,argv,p)
  939. int argc;
  940. char *argv[];
  941. void *p;
  942. {
  943.     struct sockaddr_in fsocket;
  944.     FILE *fp,*fp1;
  945.     int s;
  946.     int c;
  947.     char buf[128];
  948.     struct mbuf *bp;
  949.  
  950. #ifdef    notdef
  951.     fsocket.sin_family = AF_INET;
  952.     if(argc < 3)
  953.         fsocket.sin_port = IPPORT_FINGER;
  954.     else
  955.         fsocket.sin_port = atoi(argv[2]);
  956.  
  957.     printf("Resolving %s... ",argv[1]);
  958.     if((fsocket.sin_addr.s_addr = resolve(argv[1])) == 0){
  959.         printf(Badhost,argv[1]);
  960.         keywait(NULLCHAR,1);
  961.         return 1;
  962.     }
  963.     if((s = socket(AF_INET,SOCK_STREAM,0)) == -1){
  964.         printf("Can't create socket\n");
  965.         keywait(NULLCHAR,1);
  966.         return 1;
  967.     }
  968.     if(connect(s,(char *)&fsocket,sizeof(fsocket)) == -1){
  969.         perror("connect failed");
  970.         return 1;
  971.     }
  972.     printf("connected\n");
  973.     fp = fdopen(s,"r+t");
  974.     fprintf(fp,"karn\n");
  975.     fflush(fp);
  976.     while((c = getc(fp)) != EOF){
  977.         fputc(c,stdout);
  978.     }
  979.     fclose(fp);
  980. #endif
  981.  
  982.     fp = fopen("net.map","rt");
  983.     fp1 = fopen("net.foo","wt");
  984.     while((c = fgetc(fp)) != EOF){
  985.         fputc(c,fp1);
  986.     }
  987.     printf("eof reached\r\n");
  988.     fclose(fp);
  989.     fclose(fp1);
  990.     return 0;
  991. }
  992. #endif
  993. #ifdef    notdef
  994. char imsg[] = { 0x01, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  995.     0,0,0,0,0,0 };
  996.  
  997. int
  998. dotest(argc,argv,p)
  999. int argc;
  1000. char *argv[];
  1001. void *p;
  1002. {
  1003.     struct mbuf *bp;
  1004.     struct iface *ifp;
  1005.     extern qtso_raw();
  1006.  
  1007.     bp = qdata(imsg,sizeof(imsg));
  1008.     ifp = if_lookup("com3");
  1009.     (*ifp->raw)(ifp,bp);
  1010.     return 0;
  1011. }
  1012.  
  1013. int
  1014. dotest(argc,argv,p)
  1015. int argc;
  1016. char *argv[];
  1017. void *p;
  1018. {
  1019.     void sigsender();
  1020.     struct proc *child;
  1021.  
  1022.     if(SETSIG(666)){
  1023.         printf("parent received signal, exiting...\n");
  1024.         return;
  1025.     }
  1026.  
  1027.     printf("Hello from parent, my proc is %lx. Spawning sigsender.\n",
  1028.         ptol(Curproc));
  1029.     child = newproc("sigsender",512,sigsender,0,(void *)Curproc,NULL,0);
  1030.     printf("child spawned, proc = %lx\n",ptol(child));
  1031.     printf("parent looping.\n");
  1032.     for(;;){
  1033.         pwait((void *)0x12345678);      /* Not likely to occur */
  1034.         printf("parent returned from pwait!!\n");
  1035.     }
  1036.  
  1037. }
  1038. void
  1039. sigsender(a,b,c)
  1040. int a;
  1041. void *b,*c;
  1042. {
  1043.     struct proc *parent;
  1044.  
  1045.     parent = (struct proc *)b;
  1046.     printf("hello, sigsender here. procid is %lx. Parent is %lx. Pausing...\n",
  1047.         ptol(Curproc),ptol(parent));
  1048.     pause(10000L);
  1049.     printf("sigsender: alerting parent\n");
  1050.     alert(parent,666);
  1051.     printf("sigsender: returning\n");
  1052. }
  1053. dotest(argc,argv,p)
  1054. int argc;
  1055. char *argv[];
  1056. void *p;
  1057. {
  1058.     int c;
  1059.     struct session *sp;
  1060.  
  1061.     sp = newsession("test",TIP,1);
  1062.     fmode(stdin,STREAM_BINARY);
  1063.     fmode(stdout,STREAM_BINARY);
  1064.     sp->ttystate.edit = 0;
  1065.     sp->ttystate.echo = 0;
  1066.  
  1067.     printf("hello from test\n");
  1068.     while((c = getchar()) != 0x1a)
  1069.         putchar(c);
  1070.     printf("text exiting\n");
  1071.     keywait(NULLCHAR,1);
  1072.     freesession(sp);
  1073.     return 0;
  1074. }
  1075. #endif
  1076.